import Vue from 'vue'
// 从node_modules中引入vuex
import Vuex from 'vuex'
import mutations from './mutation.js'
// 引入模块
import userModules from './modules/user/index'
import {getPoint} from '../http'
Vue.use(Vuex);
// 创建一个store实例
const store = new Vuex.Store({
  // 存数据，类似vue中的data
  state: {
    // 初始化数据状态
    count: 0,
    age: 18,
    point: 0,
    level: 1
  },
  // 对原数据进行加工，类似vue中的计算属性
  getters: {
    // 这个函数中要传state这个参数.依赖缓存，当state不变时，即使调用多次也只执行一次
    nextAge: state=> {
      return state.age + 1
    },
    nextLevel: state => {
      return state.level + 1
    }
  },
  // 同步修改数据的唯一方式，只能在这里修改数据
  mutations,
  // 异步地修改数据，最终还是通过mutation修改
  actions: {
    // 获取会员积分
    async getPoint ({ commit }) {
      // this.$http('/getPoint')
      commit('gotPoint', await getPoint())
    },
    // 获取会员等级
    async getLevel ({ dispatch, commit }) {
      await dispatch('getPoint') // 等待获取积分
      commit('gotLevel', await getLevel())
    }
  },
  // 将vuex分成多个模块
  modules: {
    // 用户模块，记得引入
    user: userModules
  }
})
export default store